package com.naiterui.ehp.bs.doctor.remote;

import java.util.List;
import java.util.Map;

import com.naiterui.common.repository.page.PageVO;
import com.naiterui.ehp.bp.bo.doctor.product.CategoryBO;
import com.naiterui.ehp.bp.bo.doctor.product.CueWordBO;
import com.naiterui.ehp.bp.bo.doctor.product.ProductDetailBO;
import com.naiterui.ehp.bp.bo.doctor.product.ProductSearchParamBO;
import com.naiterui.ehp.bp.bo.emr.MedicalRecordScreenBO;
import com.naiterui.ehp.bp.bo.medication.MedicationDefaultUsageBO;
import com.naiterui.ehp.bp.constants.PaQrCodeEnum;
import com.naiterui.ehp.bp.support.exception.BusinessException;
import com.naiterui.ehp.bs.doctor.vo.product.ProductInfoVO;

public interface IAdRemoter {
    /**
     * 获取病历的主诉既往史必填标识（在emr配置文件中,因为最早是入在emr中的）
     * IRemoter.getRequiredFlag()
     *
     * @return
     *
     * @throws BusinessException
     * @Author lichaopi
     * @Date 2018年6月29日
     * @since 1.0.0
     */
    Integer getRequiredFlag() throws BusinessException;

    /**
     * 查询筛选条件
     * IRemoter.getScreenList()
     *
     * @param doctorId
     * @param patientId
     *
     * @return
     *
     * @throws BusinessException
     * @Author lichaopi
     * @Date 2018年6月1日
     * @since 1.0.0
     */
    List<MedicalRecordScreenBO> getScreenList(Long doctorId, Long patientId) throws BusinessException;

    /**
     * 提醒患者发送病历
     * IRemoter.remindPatinetSend()
     *
     * @throws BusinessException
     * @Author lichaopi
     * @Date 2018年6月1日
     * @since 1.0.0
     */
    void remindPatinetSend(Long patientId, Long doctorId) throws BusinessException;

    /**
     * 判断是否本人
     * IRemoter.judgeOneself()
     *
     * @param patientId
     * @param name
     * @param gender
     * @param age
     * @param ageUnit
     *
     * @return
     *
     * @throws BusinessException
     * @Author lichaopi
     * @Date 2018年7月19日
     * @since 1.0.0
     */
    Integer judgeOneself(Long patientId, String name, Integer gender, Integer age, String ageUnit) throws BusinessException;


    /**
     * 搜索商品信息
     *
     * @param searchParam param
     *
     * @return VO
     */
    PageVO<ProductInfoVO> getProductInfo(ProductSearchParamBO searchParam) throws BusinessException;

    /**
     * 获取商品详情
     *
     * @param skuId skuId
     *
     * @return VO
     */
    ProductDetailBO getProductDetailInfo(Long skuId) throws BusinessException;

    /**
     * 获取商品名称提示词
     *
     * @param key 搜索key
     *
     * @return BO
     */
    List<CueWordBO> getProductCueWord(String key) throws BusinessException;

    /**
     * 获取商品分类列表
     *
     * @return BO
     */
    List<CategoryBO> getCategoryList() throws BusinessException;

    /**
     * 获取二维码地址
     *
     * @param codeType 业务类型
     * @param doctorId 医生id
     *
     * @return
     */
    String getInviteCodeUrl(PaQrCodeEnum codeType, Long doctorId) throws BusinessException;

    Map<Long, MedicationDefaultUsageBO> getDefaultUsage(String skuIds) throws BusinessException;

    void supervisePushSession(String sessionId) throws BusinessException, Exception;
}
